home *** CD-ROM | disk | FTP | other *** search
Wrap
100 KEY OFF: GOTO 1000 200 REM -MACHINE SPECIFIC PARAMETERS SET HERE 210 REM SCREEN NUMBER FOR HIGH RES 220 HRES%=2 'IBM PC 230 REM PIXEL BOUNDARIES FOR HRES SCREEN 240 BOT%=199 : SRIGHT%=639 245 REM ADVANCE TO NEW PAGE CHAR 250 PADV%=140 'EPSON 260 BOT%=BOT%-17: SL%=BOT%+13: TOP%=12 : SLEFT%=32: SRIGHT%=SRIGHT%-32 290 RETURN 300 CLS: LOCATE 6,35 : PRINT "ECSTAT(tm)" 305 LOCATE 7,35: PRINT "Version 1.1" 310 LOCATE 9,31 : PRINT "by ROBERT S DOHNER" 320 LOCATE 10,34 : PRINT "FLETCHER SCHOOL" 330 LOCATE 11,34 : PRINT "TUFTS UNIVERSITY" 340 LOCATE 12,34 : PRINT "MEDFORD, MA 02155" 350 LOCATE 15,20 : PRINT "Copyright (C) 1984 All rights reserved" 352 LOCATE 20,1 : PRINT "This program is distributed as User-Supported Software. If you" 354 LOCATE 21,1 : PRINT "find this program useful, a contribution of $25 is requested." : GOSUB 19030 360 RETURN 1000 DEFINT I-N : JX=0 : IX=JX : K=JX : F#=0 : R#=F# : RHO=0 : SUM#=F# 1002 YSS#=F# : YBAR#=F# 1004 N2=K : N1=K : L1=K 1005 DIM NSMPL(21) : J=K : I=K 1010 NFCN=6 : DIM FCN$(NFCN) 1020 DATA LOG,EXP,SQR,ABS,SIN,COS,TAN 1030 FOR I=0 TO NFCN : READ FCN$(I) : NEXT I 1035 DIM IH(5) 1040 FIRSTIME%=-1 : DISKFILE%=0 1050 GOSUB 12000 1500 DEFINT I-N: ON ERROR GOTO 18000: GOTO 2210 2000 CLS 2010 PRINT "1 CATALOG DATA IN MEMORY" TAB(50) "ECSTAT COMMANDS" 2015 PRINT "2 CATALOG FILES ON DISK" 2020 PRINT "3 DISPLAY DATA" 2025 PRINT "4 PRINT DATA" 2030 PRINT "5 ENTER DATA" 2040 PRINT "6 EDIT DATA" 2050 PRINT "7 ";SDATA$ 2060 PRINT "8 ";RDATA$ 2062 PRINT "9 CHANGE SAMPLE RANGE" 2064 PRINT "10 COMPUTE A NEW VARIABLE" 2070 PRINT "11 ";MVC$ 2090 PRINT "12 ";OLS$;" REGRESSION" 2092 PRINT "13 ";CO$ 2093 PRINT "14 ";TSLS$ 2094 PRINT "15 ";OSF$ 2095 PRINT "16 ";OANDI$ 2096 PRINT "17 SCATTER PLOT" 2098 PRINT "18 TIME PLOT" 2100 PRINT "19 LOAD DATA FROM AN ASCII FILE" 2103 PRINT "20 HOUSEKEEPING OPERATIONS" 2105 PRINT "21 RESTART PROGRAM" 2110 PRINT "22 EXIT PROGRAM" 2120 PRINT 2130 INPUT "ENTER DESIRED SERVICE (1-22) >",ANSWER 2140 ANSW%=ANSWER 2150 IF ANSW%=ANSWER AND ANSW%>=1 AND ANSW%<=22 THEN 2200 2160 PRINT "RESPONSE REQUIRES AN INTEGER BETWEEN 1 AND 22" 2170 GOSUB 19030:GOTO 2000 2200 ON ANSW% GOTO 2210,2210,2210,2210,2210,2210,2210,2210,2500,2500,2500,2500,2500,2500,2500,2500,2500,2500,2210,2210,2210,2210 2210 ON ANSW% GOSUB 3000,3100,4000,4010,5000,6000,7000,8000,20000,3080,9000,11000,26000,28000,27000,29000,25000,25300,8300,3200,13000,14000 2300 REM RETURN HERE AFTER PERFORMING SERVICE 2400 GOTO 2000 2500 CHAIN "ECSTAT2.BAS",1000,ALL 3000 REM DATA CATALOG 3005 LP%=0 3010 CLS 3020 PRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS 3025 IF LP% THEN LPRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS 3030 PRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR 3035 IF LP% THEN LPRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR 3040 PRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: PRINT 3042 IF LP% THEN LPRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: LPRINT 3048 GOSUB 24800 3049 PRINT: IF LP% THEN LPRINT 3050 PRINT "DEFINED VARIABLES ARE:" : PRINT 3055 IF LP% THEN LPRINT "DEFINED VARIABLES ARE:" : LPRINT 3060 FOR I=0 TO NUMVAR-1 3062 PRINT NAMES$(I), 3064 IF LP% THEN LPRINT NAMES$(I), 3066 NEXT I 3070 GOSUB 19100 3080 IF LP% OR SCR% THEN 3010 ELSE RETURN 3100 REM DISK CATALOG 3110 CLS : S$=" " 3120 PRINT "CATALOG FILES ON DISK" : PRINT 3130 INPUT "WHICH DRIVE (A or B)?> ",ANSWER$ : IF ANSWER$="" THEN RETURN 3140 LSET S$=ANSWER$ : N=ASC(S$) : IF (N<65) AND (N>72) THEN 3110 3142 CLS : PRINT : PRINT "FILES ON DRIVE ";S$ : PRINT 3145 PRINT : FILES S$+":*.*": IF T$="?" THEN RETURN 3150 GOSUB 19000: RETURN 3200 CLS: PRINT "HOUSEKEEPING OPERATIONS" 3210 PRINT "1 RENAME A VARIABLE" 3220 PRINT "2 DELETE VARIABLE(S)" 3230 PRINT "3 EXTEND DATA RANGE" 3235 PRINT "4 ADD DATA FROM A DISK FILE" 3240 PRINT "5 RETURN TO MAIN MENU" : PRINT 3250 INPUT "ENTER DESIRED SERVICE (1-5) >",ANSWER 3260 ANSW%=ANSWER 3270 IF ANSW%>=1 AND ANSW%<=5 AND ANSW%=ANSWER THEN 3300 3280 PRINT "RESPONSE REQUIRES INTEGER BETWEEN 1 AND 5" 3290 GOSUB 19030 : GOTO 3200 3300 IF ANSW%=5 THEN RETURN 3310 ON ANSW% GOSUB 3350,3450,3600,8700 3320 RETURN 3350 CLS: PRINT "RENAME VARIABLE" : PRINT 3360 NEWNAMES=FALSE% : GOSUB 3800 3370 INPUT "CURRENT NAME >",NAMEIS$ 3380 IF NAMEIS$="" THEN RETURN ELSE GOSUB 16100 3390 INPUT "NEW NAME >",NAMEIS$ 3400 IF NAMEIS$="" THEN RETURN 3410 NAMES$(LISTV(0))=NAMEIS$ : PRINT 3420 PRINT "NEXT VARIABLE OR ";RMM$ : GOTO 3370 3450 NEWNAMES=FALSE%: MAXNAMES=NUMVAR-1: NAMEERR=FALSE%: R#=0 3460 CLS: PRINT "DELETE VARIABLES" : PRINT 3465 GOSUB 3800 3470 PRINT: LISTLEN=0 : GOSUB 16510 3480 IF NAMEERR THEN RETURN 3490 FOR I=0 TO L1 3500 LVAR=NUMVAR-1 : K=LISTV(I) : IF K=0 THEN 3560 ELSE IF K=LVAR THEN 3550 3510 FOR J=0 TO NUMOBS-1 3520 X#(J,K)=X#(J,LVAR): X#(J,LVAR)=R# 3530 NEXT J 3540 NAMES$(K)=NAMES$(LVAR) 3550 NUMVAR=NUMVAR-1 3560 NEXT I 3570 RETURN 3600 ER%=TRUE% 3610 PRINT "LAST OBSERVATION IS NOW ";NUMOBS 3620 INPUT "ENTER NEW VALUE FOR LAST OBSERVATION >",ANSWER$ 3630 IF ANSWER$="" THEN RETURN 3640 ANSWER=VAL(ANSWER$) : NEWOBS=ANSWER 3650 IF NEWOBS<=0 OR NEWOBS<>ANSWER THEN PRINT "MUST BE POSITIVE INTEGER" : GOTO 3620 3660 FILENAME$="XTEND$$.DAT" : GOSUB 7065 3670 SWAP NOBS,NUMOBS : NOBS=NEWOBS : ERASE XPX#,XPXI#,XBAR#,BETA# 3680 GOSUB 12500 3690 OPEN FILENAME$ FOR INPUT AS #1 3700 INPUT#1,J,NUMVAR,NOBS 3705 IF MAXVAR<NUMVAR+1 THEN NEWOBS=NOBS: PRINT "TOO MANY OBSERVATIONS": GOSUB 19030:GOSUB 12500 3710 GOSUB 8100 3715 CLOSE#1 : KILL FILENAME$ 3720 FOR J=0 TO NEWOBS-1 : X#(J,0)=1! : NEXT J 3750 ER%=FALSE : NOBS=NUMOBS : NUMOBS=NEWOBS : RETURN 3800 PRINT "DEFINED VARIABLES ARE:" 3810 FOR I=0 TO NUMVAR-1 : PRINT NAMES$(I),:NEXT I 3820 PRINT : PRINT : RETURN 4000 IF LP%=0 GOTO 4020 4010 LP%=1 4020 CLS 4030 PRINT "DATA IN ONE OR MORE VARIABLES MAY BE "; 4032 IF LP%=1 THEN PRINT "PRINTED" ELSE PRINT "DISPLAYED" 4040 MAXNAMES=NUMVAR:NEWNAMES=FALSE%:FORCE0%=FALSE% 4050 GOSUB 16000:IF NAMEERR THEN RETURN 4071 IF LISTLEN=0 THEN RETURN 4080 FIRSTVAR=0:LASTVAR=3:FIRSTOB=0:LASTOB=19 : IF LP% THEN LASTOB=59 4090 IF LASTVAR>LISTLEN-1 THEN LASTVAR=LISTLEN-1 4100 IF LASTOB>NUMOBS-1 THEN LASTOB=NUMOBS-1 4110 CLS 4120 PRINT "OBSERVATION "; 4125 IF LP% THEN LPRINT "OBSERVATION "; 4130 FOR I=FIRSTVAR TO LASTVAR 4140 PRINT USING "\ \";PRNAM$(I); 4145 IF LP% THEN LPRINT USING "\ \";PRNAM$(I); 4150 NEXT I 4160 PRINT : IF LP% THEN LPRINT 4170 FOR I=FIRSTOB TO LASTOB 4180 PRINT I+1, : IF LP% THEN LPRINT I+1, 4190 FOR J=FIRSTVAR TO LASTVAR: XB=X#(I,LISTV(J)) 4200 PRINT XB, 4205 IF LP% THEN LPRINT XB, 4210 NEXT J 4220 PRINT : IF LP% THEN LPRINT 4230 NEXT I 4240 REM ONE SCREENFUL IS PRINTED 4250 PRINT : IF LP% THEN LPRINT 4260 IF NOT LP% THEN GOSUB 19030 4270 IF LASTVAR=LISTLEN-1 AND LASTOB=NUMOBS-1 THEN GOTO 4340 4280 IF LASTOB=NUMOBS-1 THEN 4300 4290 FIRSTOB=LASTOB+1:LASTOB=FIRSTOB+19 4295 IF NOT LP% THEN GOTO 4100 ELSE LASTOB=FIRSTOB+59:LPRINT CHR$(PADV%):GOTO 4100 4300 REM NEXT SET OF VARIABLES 4310 FIRSTVAR=LASTVAR+1:LASTVAR=FIRSTVAR+3 4320 FIRSTOB=0:LASTOB=19:IF LP% THEN LPRINT CHR$(140) 4330 GOTO 4090 4340 IF LP% THEN LPRINT CHR$(PADV%) : LP%=0 4350 RETURN 5000 REM 5010 REM ENTER DATA 5020 CLS 5030 PRINT "ENTER DATA FOR NEW VARIABLES":PRINT 5040 MAXNAMES=MAXVAR-NUMVAR:NEWNAMES=TRUE%:FORCE0%=FALSE% 5050 GOSUB 16000:IF NAMEERR THEN RETURN 5055 REM VARIABLE IN LISTV(0) 5060 PRINT:PRINT "ENTER DATA - (<ENTER> ALONE MEANS 0)": PRINT 5070 I=0:J=I 5080 S$=" " : PRINT NAMES$(LISTV(J));"(";I+1;")" TAB(20) ">"; 5090 INPUT "",ANSWER$ : LSET S$=ANSWER$ 5100 IF S$=" " THEN 5140 ELSE IF S$="E" THEN RETURN ELSE IF S$<>"B" THEN 5130 5110 IF J>0 THEN J=J-1 ELSE IF I>0 THEN J=L1 : I=I-1 5120 GOTO 5080 5130 X#(I,LISTV(J))=VAL(ANSWER$) 5140 J=J+1 : IF J>L1 THEN J=0 : I=I+1 : IF L1 THEN PRINT 5150 IF I>=NUMOBS THEN RETURN ELSE 5080 6000 REM 6010 REM EDIT DATA 6020 CLS 6030 PRINT "ENTER NAME OF VARIABLE TO BE EDITED" 6040 MAXNAMES=1:NEWNAMES=FALSE%:FORCE0%=FALSE% 6050 GOSUB 16000:IF NAMEERR THEN RETURN 6060 REM VARIABLE IN LISTV(0) 6070 LVAR=LISTV(0) 6080 CLS: ANSW%=0 6090 PRINT:PRINT "EDITING: ";NAMES$(LVAR):PRINT "OBSERVATION NUMBER TO BE CHANGED" 6100 PRINT RMM$; : INPUT "> ",ANSWER$ 6110 IF ANSWER$="" THEN RETURN 6115 IF MID$(ANSWER$,1,1)="N" THEN ANSW%=ANSW%+1 : GOTO 6160 6120 ANSWER=VAL(ANSWER$):ANSW%=ANSWER 6130 IF ANSWER=ANSW% AND ANSW%>0 AND ANSW%<=NUMOBS THEN 6160 6140 PRINT "OBSERVATION MUST BE INTEGER BETWEEN 1 AND ";NUMOBS 6150 GOTO 6090 6160 PRINT:PRINT NAMES$(LVAR);"( ";ANSW%;") = ";X#(ANSW%-1,LVAR); 6170 S$=" " : INPUT "NEW VALUE?> ",ANSWER$ : IF ANSWER$="" THEN GOTO 6090 6172 LSET S$=ANSWER$ 6174 IF S$="I" THEN GOSUB 6300 6175 IF S$="D" THEN GOSUB 6400 : GOTO 6090 6178 ANSWER=VAL(ANSWER$) 6180 PRINT NAMES$(LVAR);"( ";ANSW%;") WAS ";X#(ANSW%-1,LVAR); 6190 PRINT " IS NOW ";ANSWER 6200 X#(ANSW%-1,LVAR)=ANSWER 6210 GOTO 6090 6300 FOR I=NUMOBS-1 TO ANSW% STEP -1 6310 X#(I,LVAR)=X#(I-1,LVAR) 6320 NEXT I 6330 PRINT : INPUT "INSERTED VALUE >",ANSWER$ : RETURN 6400 IF ANSW%=NUMOBS THEN 6440 6405 XB=X#(ANSW%-1,LVAR) 6410 FOR I=ANSW%-1 TO NUMOBS-2 6420 X#(I,LVAR)=X#(I+1,LVAR) 6430 NEXT I 6440 X#(NUMOBS-1,LVAR)=0! 6450 PRINT NAMES$(LVAR);"( ";ANSW%;") WAS ";XB; 6460 PRINT " IS NOW ";X#(ANSW%-1,LVAR) : RETURN 7000 REM 7050 CLS 7055 PRINT SDATA$:PRINT 7060 INPUT "ENTER DISK FILE NAME> ",FILENAME$: IF FILENAME$="" THEN RETURN 7065 NAME FILENAME$ AS FILENAME$ 7070 OPEN FILENAME$ FOR OUTPUT AS #1 7080 WRITE#1,MAXVAR,NUMVAR-1,NUMOBS 7090 FOR I=1 TO NUMVAR-1:WRITE#1,NAMES$(I):NEXT I 7100 FOR I=1 TO NUMVAR-1 7110 FOR J=0 TO NUMOBS-1 7120 WRITE#1,X#(J,I) 7130 NEXT J,I 7140 CLOSE #1 : IF ER% THEN RETURN 7150 PRINT "DATA FILED IN ";FILENAME$ 7160 GOSUB 19000:RETURN 8000 REM 8010 REM RETRIEVE DATA FROM DISK FILE 8020 CLS: S$=" " 8025 PRINT RDATA$:PRINT 8030 INPUT "ENTER DISK FILE NAME> ",FILENAME$: IF FILENAME$="" THEN RETURN 8032 T$=" ": LSET T$=FILENAME$: IF T$="?" THEN GOSUB 3120: PRINT: GOTO 8025 8040 OPEN FILENAME$ FOR INPUT AS #1 8050 INPUT#1,MAXVAR,NUMVAR,NUMOBS 8052 IF MAXVAR<=0 OR NUMVAR<=0 OR NUMOBS<=0 OR MAXVAR<NUMVAR THEN GOSUB 8900: RETURN 8055 NOBS=NUMOBS : NSMPL(1)=0 : NSMPL(2)=NOBS-1 : NR2=2 8060 DISKFILE%=TRUE% 8090 GOSUB 12000 8100 FOR I=1 TO NUMVAR:INPUT#1,NAMES$(I):NEXT I 8110 FOR I=1 TO NUMVAR 8120 FOR J=0 TO NOBS-1 8130 INPUT#1,X#(J,I) 8140 NEXT J,I 8153 FOR J=0 TO NUMOBS-1: X#(J,0)=1! : NEXT J 8155 NAMES$(0)="CONST" : NUMVAR=NUMVAR+1 8157 IF ER% THEN RETURN 8160 PRINT "DATA RETRIEVED FROM ";FILENAME$ 8170 CLOSE#1 : GOSUB 19000:RETURN 8300 REM ROUTINE TO LOAD DATA FROM ASCII FILE 8310 CLS: INPUT "NAME OF FILE CONTAINING DATA ",FILENAME$ : IF FILENAME$="" THEN RETURN 8320 PRINT : INPUT "NUMBER OF OBSERVATIONS ",NUMOBS 8330 PRINT : INPUT "NUMBER OF VARIABLES ",NUMVAR 8335 S$=" ": DISKFILE%=TRUE% : NOBS=NUMOBS: GOSUB 12500 8337 IF NOBSERR THEN RETURN 8340 OPEN FILENAME$ FOR INPUT AS #1 8350 PRINT : INPUT "ARE VARIABLE NAMES GIVEN IN FIRST LINE OF FILE? (Y/N) ",ANSWER$ 8355 LSET S$=ANSWER$ : IF S$="N" OR S$="n" THEN 8420 ELSE IF S$<>"Y" AND S$<>"y"THEN 8350 8360 INPUT#1,ANSWER$ : IF ANSWER$="" THEN 8360 8362 S$=" " : ANSWER$=ANSWER$+S$ : N1=1 : L=LEN(ANSWER$): I=0 8365 IF N1=L THEN GOTO 8470 8370 IF MID$(ANSWER$,N1,1)=S$ THEN N1=N1+1 : GOTO 8365 8375 N2=INSTR(N1,ANSWER$,S$) : I=I+1 : NAMES$(I)=MID$(ANSWER$,N1,N2-N1) 8380 IF N2<L THEN N1=N2+1 : GOTO 8365 8385 GOTO 8470 8420 PRINT : PRINT "ENTER NAMES OF VARIABLES IN ORDER AT PROMPTS" : PRINT 8430 FOR I=1 TO NUMVAR 8440 PRINT "VARIABLE ";I; : INPUT " ",NAMES$(I) 8445 NEXT I 8450 NBLANKS=0: S$=" " 8453 INPUT#1,ANSWER$: LSET S$=ANSWER$: IF S$=" " THEN NBLANKS=NBLANKS+1: GOTO 8453 8456 CLOSE#1: OPEN FILENAME$ FOR INPUT AS #1: IF NBLANKS=0 THEN 8470 8459 FOR I=1 TO NBLANKS: INPUT#1,ANSWER$: NEXT I 8470 NUMVAR=NUMVAR+1 8480 PRINT : INPUT "DATA ARRANGED BY 1)OBSERVATION 2) VARIABLE ? ",J 8490 IF J<>1 AND J<>2 THEN 8480 8500 IF J=2 THEN 8550 8510 FOR I=0 TO NUMOBS-1 8520 FOR J=1 TO NUMVAR-1 8525 IF EOF(1) THEN 8600 8530 INPUT#1,X#(I,J) 8540 NEXT J : NEXT I : CLOSE#1 : RETURN 8550 FOR J=1 TO NUMVAR-1 8560 FOR I=0 TO NUMOBS-1 8565 IF EOF(1) THEN 8600 8570 INPUT#1,X#(I,J) 8580 NEXT I : NEXT J : CLOSE#1 : RETURN 8600 CLOSE#1: PRINT "INPUT PAST END OF DATA": GOSUB 19030: RETURN 8700 CLS: PRINT "ADD DATA FROM DISK FILE" 8710 PRINT "WARNING: PROGRAM ASSUMES OBSERVATION NUMBERS CORRESPOND":PRINT 8720 INPUT "ENTER DISK FILE NAME> ",FILENAME$: IF FILENAME$="" THEN RETURN 8730 OPEN FILENAME$ FOR INPUT AS #1 8740 INPUT#1, J,IX,JX 8745 IF J<=0 OR IX<=0 OR JX<=0 OR J<IX THEN GOSUB 8900: RETURN 8750 IF NUMVAR+IX>MAXVAR THEN PRINT "TOO MANY VARIABLES":GOSUB 19030:RETURN 8760 K=JX: IF NUMOBS<K THEN K=NUMOBS 8770 K=K-1: JX=JX-1: IX=NUMVAR+IX-1 8780 FOR I=NUMVAR TO IX: INPUT#1,NAMES$(I): NEXT I 8790 FOR I=NUMVAR TO IX 8800 FOR J=0 TO K 8810 INPUT#1,X#(J,I) 8820 NEXT J 8830 IF K=JX THEN 8850 8840 FOR J=K+1 TO JX: INPUT#1,XB: NEXT J 8850 NEXT I: NUMVAR=IX+1 8855 PRINT "DATA RETRIEVED FROM ";FILENAME$: GOSUB 19000 8860 CLOSE#1: RETURN 8900 CLOSE#1: PRINT "DATA FILE NOT CREATED BY ECSTAT" 8910 GOSUB 19000: RETURN 12000 REM 12010 REM ALLOCATE STORAGE AND INITIALIZE PROGRAM 12020 IF NOT FIRSTIME% THEN 12420 12030 OLS$="ORDINARY LEAST SQUARES": SDATA$="SAVE DATA TO DISK" 12032 CO$="REGRESSION - AUTOCORRELATION": RDATA$="RETRIEVE DATA FROM DISK" 12034 MVC$="MEANS, VARIANCES, AND CORRELATIONS":TSLS$="TWO STAGE LEAST SQUARES" 12036 OSF$="OUT OF SAMPLE REGRESSION FIT": OANDI$="OUTLIERS AND INFLUENCE" 12040 COR%=0 : PTA$=" PLEASE TRY AGAIN" : DP%=0 : SP22$=SPACE$(22) 12045 ON ERROR GOTO 18000 : RMM$="<ENTER> ALONE RETURNS TO MAIN MENU " 12046 AYS$="ARE YOU SURE YOU WANT TO " : IFNOT$="IF YOU HAVE NOT STORED YOUR DATA YOU WILL LOSE IT" 12050 TRUE%=-1:FALSE%=0 12060 FIRSTIME%=FALSE%:WASFIRST%=TRUE% 12070 GOSUB 200 12080 GOSUB 300 12095 CLS 12100 PRINT "DO YOU WISH TO LOAD DATA FROM A DISK FILE (Y/N)?>"; 12110 INPUT "",ANSWER$ 12120 IF ANSWER$="Y" OR ANSWER$="y" THEN GOSUB 8000:GOTO 12410 12125 IF ANSWER$<>"N" AND ANSWER$<>"n" THEN CLS : GOTO 12100 12130 INPUT "NUMBER OF OBSERVATIONS>";ANSWER$ 12140 IF ANSWER$="" THEN RETURN 12150 ANSWER=VAL(ANSWER$) 12160 ANSW%=ANSWER 12170 IF (ANSW%=ANSWER) AND (ANSW%>0) THEN 12210 12180 PRINT "POSITIVE INTEGER REQUIRED" 12190 PRINT RMM$ : PRINT 12200 GOTO 12100 12210 NUMOBS=ANSW% : NOBS=NUMOBS : NSMPL(1)=0 : NSMPL(2)=NOBS-1 : NR2=2 12220 GOSUB 12500 12230 IF NOBSERR THEN NOBSERR=FALSE%: CLS: GOTO 12130 12400 NUMVAR=1 12410 IF NOT WASFIRST% THEN RETURN 12415 GOTO 2000 'FAKE RETURN, GOSUB WIPED OUT BY CLEAR 12420 REM NOT THE FIRST TIME INITIALIZED 12430 ERASE X#,NAMES$,LAG,LAGR,RESID#,SRESID,LISTV,LISTRV,PRNAM$,Y#,YS#,IND 12440 IF NOT DISKFILE% THEN 12095 12450 K1=MAXVAR-1:N1=NUMOBS-1 12460 ERASE NAMES$,X#,LAG,LAGR,RESID#,SRESID,LISTV,LISTRV,PRNAM$,Y#,YS#,IND 12465 DIM NAMES$(K1),X#(N1,K1),LAG(K1),LAGR(K1),RESID#(N1),LISTV(K1),PRNAM$(K1) 12466 DIM SRESID(N1),LISTRV(K1),Y#(K1),YS#(K1),IND(K1) 12470 RETURN 12500 NSMPL(1)=0: NSMPL(2)=NOBS-1: NR2=2 12505 ERASE X#,NAMES$,LAG,LAGR,RESID#,SRESID,LISTV,LISTRV,PRNAM$,Y#,YS#,IND 12510 K=INT((20500/NOBS -12)/(8+12/NOBS)) 12520 IF K<20 THEN J=28000-K*(16*K+52): K=INT((J/NOBS-12)/(8+12/NOBS)) 12550 MAXVAR=K: NOBSERR=FALSE% 12560 IF MAXVAR<=1 THEN PRINT "TOO MANY OBSERVATIONS": NOBSERR=TRUE%: GOSUB 19030: RETURN 12570 K1=K-1:N1=NOBS-1 12580 DIM NAMES$(K1),X#(N1,K1),LAG(K1),LAGR(K1),RESID#(N1),LISTV(K1),PRNAM$(K1) 12585 DIM SRESID(N1),LISTRV(K1),Y#(K1),YS#(K1),IND(K1) 12590 NAMES$(0)="CONST" 12595 FOR I=0 TO N1:X#(I,0)=1!:NEXT I: RETURN 13000 REM 13010 REM RESTART PROGRAM 13020 PRINT IFNOT$ : PRINT AYS$; : INPUT "START OVER? (Y/N)>",ANSWER$ 13030 IF ANSWER$="Y" OR ANSWER$="y" THEN 13080 ELSE RETURN 13080 FIRSTIME%=FALSE%:DISKFILE%=FALSE% 13090 GOSUB 12000 13100 RETURN 14000 REM 14010 REM EXIT PROGRAM 14015 PRINT IFNOT$ 14020 PRINT AYS$; : INPUT "TO EXIT? (Y/N)>",ANSWER$ 14030 IF ANSWER$="y" OR ANSWER$="Y" THEN SYSTEM 14040 RETURN 15000 REM 15070 IF NUMVAR<MAXVAR THEN 15100 15080 PRINT "SYMBOL TABLE FULL! NO NEW VARIABLES" : GOSUB 19050 15090 NAMEERR=TRUE%:RETURN 15100 FOUNDIT%=FALSE% 15110 FOR I=0 TO NUMVAR-1 15120 IF NAMEIS$=NAMES$(I) THEN FOUNDIT%=TRUE% 15130 NEXT I 15140 IF NOT FOUNDIT% THEN 15170 15150 PRINT CHR$(34);NAMEIS$;CHR$(34);" ALREADY DEFINED - NOT A NEW NAME" 15155 GOSUB 19000 15160 NAMEERR=TRUE%:RETURN 15170 NAMELOC=NUMVAR 15180 NUMVAR=NUMVAR+1 15190 NAMES$(NAMELOC)=NAMEIS$ 15200 RETURN 16000 REM 16010 REM COLLECT A LIST OF NAMES AND RETURN LOCATIONS IN LISTV 16020 REM A SINGLE NAME IS A SPECIAL CASE 16030 NAMEERR=FALSE% 16040 IF MAXNAMES>1 THEN 16500 16050 INPUT "VARIABLE NAME IS?> ",NAMEIS$ 16060 IF NAMEIS$="" THEN NAMEERR=TRUE%:RETURN 16070 IF NOT NEWNAMES THEN 16100 16080 GOSUB 15000 16090 IF NAMEERR THEN RETURN ELSE 16180 16100 NAMELOC=-1 16110 FOR I=0 TO NUMVAR-1 16120 IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I 16130 NEXT I 16140 IF NAMELOC<>-1 THEN 16180 16150 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED" 16160 PRINT "RE-ENTER NAME OR <ENTER> TO RETURN TO COMMAND MENU" 16170 GOTO 16050 16180 REM PUT NAMELOC IN LISTV 16190 LISTLEN=1 16200 LISTV(0)=NAMELOC 16210 RETURN 16500 REM COME HERE TO COLLECT A SERIES OF VARIABLES 16501 REM IF FORCE0% THEN INCLUDE CONSTANT AUTOMATICALLY 16502 IF NOT FORCE0% THEN LISTLEN=0 ELSE LISTV(0)=0:LISTLEN=1 16505 PRINT "ENTER VARIABLE NAME(S)" 16510 INPUT "SEPARATED BY A SPACE> ",ANSWER$ 16520 IF ANSWER$="" THEN NAMEERR=TRUE%:RETURN 16535 FOR I=0 TO MAXVAR-1 : LAG(I)=0 : NEXT I 16540 LOOKFROM=1 16550 REM RETRIEVE A VARIABLE NAME 16560 SPACELOC%=INSTR(LOOKFROM,ANSWER$," ") 16570 IF SPACELOC%=0 THEN SPACELOC%=LEN(ANSWER$)+1 16580 NAMEIS$=MID$(ANSWER$,LOOKFROM,SPACELOC%-LOOKFROM) 16582 N1=INSTR(1,NAMEIS$,"[") 16584 IF N1<=1 THEN GOTO 16594 16590 N2=INSTR(N1,NAMEIS$,"]") : LAG$=MID$(NAMEIS$,N1+1,N2-N1-1) 16592 NAMEIS$=LEFT$(NAMEIS$,N1-1) : LG=VAL(LAG$) 16594 IF LG+NSMPL(1)<0 OR LG+NSMPL(NR2)>NUMOBS-1 THEN 16900 16597 NAMELOC=-1 16600 IF NAMEIS$="" THEN 16730 16610 IF NOT NEWNAMES THEN 16630 16620 GOSUB 15000: IF NAMEERR THEN RETURN 16630 FOR I=0 TO NUMVAR-1 16640 IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I 16650 NEXT I 16660 IF NAMELOC<>-1 THEN 16700 16670 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED" 16680 PRINT "RE-ENTER LIST OR "; : PRINT RMM$ 16690 GOTO 16500 16700 REM PUT NAMELOC IN LISTV 16710 LISTV(LISTLEN)=NAMELOC : LAG(LISTLEN)=LG : LG=0 16720 LISTLEN=LISTLEN+1 16730 LOOKFROM=SPACELOC%+1 16740 IF LOOKFROM<=LEN(ANSWER$) THEN GOTO 16850 16745 L1=LISTLEN-1: IF INST THEN RETURN 16750 FOR I=0 TO L1 16760 PRNAM$(I)=NAMES$(LISTV(I)) 16770 IF LAG(I)<0 THEN PRNAM$(I)=PRNAM$(I)+"["+STR$(LAG(I))+"]" 16780 IF LAG(I)>0 THEN PRNAM$(I)=PRNAM$(I)+"[+"+STR$(LAG(I))+"]" 16790 NEXT I : RETURN 16800 NAMEERR=FALSE% : LISTLEN=0 : INPUT "VARIABLE NAME IS?> ",ANSWER$ 16810 GOTO 16520 16850 IF LISTLEN<MAXNAMES THEN 16560 16860 PRINT "TOO MANY NAMES" 16870 GOTO 16680 16900 PRINT "LAG OR LEAD IN ";NAMEIS$;" TAKES VARIABLE OUTSIDE DATA RANGE" 16910 GOSUB 19000 : NAMEERR=TRUE% : RETURN 18000 REM 18010 REM HANDLE A FEW ERRORS HERE 18020 REM DID WE RUN OUT OF SPACE? 18030 IF ERR<>7 AND ERR<>14 THEN 18070 18040 PRINT "PROGRAM RAN OUT OF MEMORY IN LINE ";ERL 18050 PRINT "SORRY..." 18060 STOP 18070 REM DID WE TRY TO READ FROM A NON-EXISTENT FILE? 18080 IF ERR<>53 OR NOT(ERL=8040 OR ERL=8730) THEN 18120 18090 IF FILENAME$="" THEN RESUME 8860 18100 PRINT "CAN'T FIND ";FILENAME$ 18110 IF ERL=8040 THEN RESUME 8030 ELSE RESUME 8720 18120 REM IS THIS A NEW OUTPUT FILE? 18130 IF ERR<>53 OR ERL<>7065 THEN 18150 18140 RESUME NEXT 18150 IF ERR<>58 OR ERL<>7065 THEN 18200 18160 PRINT "FILE ALREADY EXISTS, ARE YOU SURE? (Y/N)"; 18170 INPUT "",ANSWER$ 18180 IF ANSWER$="y" OR ANSWER$="Y" THEN RESUME NEXT 18190 RESUME 7060 18200 IF ERR<>70 THEN 18230 18210 PRINT "DISK WRITE-PROTECTED - REMOVE TAB" : GOSUB 19030 18220 IF ERL=7070 THEN RESUME 7070 ELSE IF ERL=23000 THEN RESUME 22020 ELSE RESUME 8170 18230 IF ERR<>71 THEN 18270 18240 PRINT "DISK NOT AVAILABLE" 18250 PRINT "CHECK THAT DISK IS IN DRIVE AND DOOR IS CLOSED" : GOSUB 19030 18260 IF ERL=7065 THEN RESUME 7060 ELSE IF ERL=23000 THEN RESUME 22020 ELSE IF ERL=8040 THEN RESUME 8030 ELSE IF ERL=8730 THEN RESUME 8720 ELSE RESUME 8170 18270 IF ERR<>68 THEN 18280 18273 PRINT "DISK DRIVE NOT WORKING OR NON-EXISTANT" : GOSUB 19030 18276 IF ERL=7065 THEN RESUME 7060 ELSE IF ERL=23000 THEN RESUME 22020 ELSE IF ERL=8040 THEN RESUME 8030 ELSE IF ERL=8730 THEN RESUME 8720 ELSE RESUME 8170 18280 IF ERR<>61 THEN 18310 18290 PRINT "DISK FULL - CHANGE DISK" 18300 RESUME 8170 18310 IF ERR<>64 THEN 18370 18320 PRINT "BAD FILE NAME" 18325 IF ERL=8040 OR ERL=8730 THEN RESUME 8170 18330 IF ERL<>7065 AND ERL<>7070 THEN 18370 18340 PRINT "TRY TEMP.DAT AS NAME" 18350 RESUME 7060 18370 IF ERR<>72 THEN 18390 18380 PRINT "DISKETTE PROBABLY BAD" : RESUME 8170 18390 IF ERR<>27 THEN 18420 18400 PRINT "PRINTER NOT ON OR OUT OF PAPER" : GOSUB 19000 18410 RESUME NEXT 18420 IF ERR<>9 THEN 18450 18430 PRINT "WENT BEYOND AVAILABLE DATA" 18440 PRINT "CHECK LAGS AND SAMPLE RANGE" : RESUME 8170 18450 IF ERR<>2 THEN 18490 18460 PRINT "SYNTAX ERROR" 18470 PRINT "YOUR STATEMENT DOESN'T MAKE SENSE TO ME" 18480 RESUME 8170 18490 IF ERR<>5 OR ERL<25000 OR ERL>26000 THEN 18520 18500 PRINT "ON IBM MUST HAVE GRAPHIC MONITOR AND USE ADVANCED BASIC" 18510 GOSUB 19000 : RESUME 7160 18520 IF ERR<>6 THEN 18900 18530 PRINT "Overflow" : RESUME 7160 18900 IF ERR<>5 OR (ERL<>12505 AND ERL<>12430 AND ERL<>11180 AND ERL<>17020 AND ERL<>12460 AND ERL<>3670 AND ERL<> 26060 AND ERL<>28070) THEN 18920 18910 RESUME NEXT 'OK, WE JUST ERASED SOMETHING THAT WASNT THERE 18920 PRINT "ERROR NUMBER ";ERR;" OCCURRED IN LINE ";ERL 18930 PRINT "REPORT CIRCUMSTANCES TO PROGRAM AUTHOR" : RESUME 8170 19000 REM HOLD SCREEN 19010 LOCATE 25,1 : PRINT "HIT ANY KEY TO RETURN TO COMMAND MENU>"; 19020 IF INKEY$="" THEN 19020 ELSE RETURN 19030 LOCATE 25,1 : PRINT "HIT ANY KEY TO CONTINUE>"; 19040 IF INKEY$="" THEN 19040 19045 CLS: RETURN 19050 FOR I=0 TO 1000 : NEXT I : RETURN 19100 IF LP% THEN WLP%=1 19105 LP%=0 : SCR%=0 : S$=" " 19108 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE OUTPUT REPEATED? (S, P, OR <RETURN>) "; : INPUT "",ANSWER$ 19110 LSET S$=ANSWER$ 19120 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19100 19130 IF WLP% THEN LPRINT CHR$(PADV%) : WLP%=0 19135 RETURN 19150 IF LP% THEN WLP%=1 19155 LP%=0 : SCR%=0 : S$=" " 19158 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE COVARIANCE MATRIX? (S, P, OR <RETURN>)"; : INPUT "",ANSWER$ 19160 LSET S$=ANSWER$ 19170 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19150 19180 RETURN 19200 SCR%=0 : LOCATE 25,1 19207 INPUT "WOULD YOU LIKE THE FORECAST GRAPHED? (Y/N)> ",ANSWER$ 19210 IF ANSWER$="Y" OR ANSWER$="y" THEN SCR%=1 : RETURN 19220 IF ANSWER$="N" OR ANSWER$="n" THEN RETURN ELSE 19200 24800 PRINT SPC(4) "SAMPLE RANGE "; 24803 IF LP% THEN LPRINT "SAMPLE RANGE "; 24807 N1=1 : N2=2 24810 PRINT NSMPL(N1)+1;"-";NSMPL(N2)+1; 24820 IF LP% THEN LPRINT NSMPL(N1)+1;"-";NSMPL(N2)+1; 24830 IF N2>=NR2 THEN PRINT : RETURN 24840 N1=N1+2 : N2=N2+2 : PRINT SPC(2); 24850 IF LP% THEN LPRINT SPC(2); 24860 GOTO 24810 0 IF N2>=NR2 THEN PRINT : RETURN 24840 N1=N1+2 : N